﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsFormsApplication3
{
    public partial class Editoriales : Form
    {
        DataSet dsEditoriales = new DataSet();
        string rutaBDBiblioteca = "Data Source=JOHANA-PC;Initial Catalog=Biblioteca;Integrated Security=True";
        CheckBox ChbEstado = new CheckBox();
        BindingManagerBase bmAutores;

        public Editoriales()
        {
            InitializeComponent();
        }

        private void Editoriales_Load(object sender, EventArgs e)
        {
            SetearControl();
            SqlConnection cnBiblioteca;
            AccDatBiblioteca datos = new AccDatBiblioteca();

            cnBiblioteca = datos.ObtenerConexion(rutaBDBiblioteca);
            SqlDataAdapter adp = datos.ObtenerAdaptador("Select * from Editoriales", cnBiblioteca);

            adp.Fill(dsEditoriales, "Editoriales");
            cnBiblioteca.Close();

            Grilla_Edit.DataSource = dsEditoriales.Tables["Editoriales"];
            Grilla_Edit.Refresh();
            TitulosColumnas();

            bmAutores = BindingContext[dsEditoriales, "Editoriales"];
            AsociarTextos();
            MostrarPosicion();
            //Paises();
        }

        private void TitulosColumnas()
        {
            Grilla_Edit.Columns["Cod_Edit"].HeaderText = "CODIGO";
            Grilla_Edit.Columns["Nom_edit"].HeaderText = "NOMBRE";
            Grilla_Edit.Columns["Dir_Edit"].HeaderText = "DIRECCION";
            Grilla_Edit.Columns["Cod_Postal"].HeaderText = "CODIGO POSTAL";
            Grilla_Edit.Columns["Ciudad_Edit"].HeaderText = "CIUDAD";
            Grilla_Edit.Columns["Pais_Edit"].HeaderText = "PAIS";
            Grilla_Edit.Columns["Tel_Edit"].HeaderText = "TELEFONO";
            Grilla_Edit.Columns["Mail_Edit"].HeaderText = "E_MAIL";
            Grilla_Edit.Columns["Web_Edit"].HeaderText = "WEB";
            Grilla_Edit.Columns["Contac_Edit"].HeaderText = "CONTACTO";
            Grilla_Edit.Columns["Est_Edit"].HeaderText = "ESTADO";
        }

        private void ReemplazarControl(Control controlAnterior,Control controlNuevo)
        // Esta rutina reemplaza al controlAnterior por el controlNuevo
        {
            Point ubicacion;
            Size tamanio;
            ubicacion = controlAnterior.Location;
            tamanio = controlAnterior.Size;
            controlNuevo.Location = ubicacion;
            controlNuevo.Size = tamanio;
            HabilitarControl(controlNuevo, true);
            //controlNuevo.Visible = true;
            //controlNuevo.Enabled = true;
            HabilitarControl(controlAnterior, false);
        }

        private void HabilitarControl(Control ctl, bool estado)
        {
            //Esta rutina recibe como parametro un control y un estado
            //que queremos aplicar a ese control en sus propiedades
            //Enabled y Visible
            ctl.Enabled = estado;
            ctl.Visible = estado;
        }


        private void SetearControl()
        {
            ReemplazarControl(TxtEst_Edit, ChbEstado);
            this.Controls.Add(ChbEstado);
            HabilitarControl(TxtEst_Edit, false);
        }


        private void AsociarTextos()
        {
            TxtCod_Edit.DataBindings.Add(new Binding("Text", dsEditoriales, "Editoriales." + dsEditoriales.Tables["Editoriales"].Columns[0].ColumnName.ToString()));
            TxtNom_Edit.DataBindings.Add(new Binding("Text", dsEditoriales, "Editoriales." + dsEditoriales.Tables["Editoriales"].Columns[1].ColumnName.ToString()));
            TxtDir_Edit.DataBindings.Add(new Binding("Text", dsEditoriales, "Editoriales." + dsEditoriales.Tables["Editoriales"].Columns[2].ColumnName.ToString()));
            TxtCod_Postal.DataBindings.Add(new Binding("Text", dsEditoriales, "Editoriales." + dsEditoriales.Tables["Editoriales"].Columns[3].ColumnName.ToString()));
            TxtCiudad_Edit.DataBindings.Add(new Binding("Text", dsEditoriales, "Editoriales." + dsEditoriales.Tables["Editoriales"].Columns[4].ColumnName.ToString()));
            TxtPais_Edit.DataBindings.Add(new Binding("Text", dsEditoriales, "Editoriales." + dsEditoriales.Tables["Editoriales"].Columns[5].ColumnName.ToString()));
            TxtTel_Edit.DataBindings.Add(new Binding("Text", dsEditoriales, "Editoriales." + dsEditoriales.Tables["Editoriales"].Columns[6].ColumnName.ToString()));
            TxtMail_Edit.DataBindings.Add(new Binding("Text", dsEditoriales, "Editoriales." + dsEditoriales.Tables["Editoriales"].Columns[7].ColumnName.ToString()));
            TxtWeb_Edit.DataBindings.Add(new Binding("Text", dsEditoriales, "Editoriales." + dsEditoriales.Tables["Editoriales"].Columns[8].ColumnName.ToString()));
            TxtContac_Edit.DataBindings.Add(new Binding("Text", dsEditoriales, "Editoriales." + dsEditoriales.Tables["Editoriales"].Columns[9].ColumnName.ToString()));
            ChbEstado.DataBindings.Add(new Binding("Checked", dsEditoriales, "Editoriales." + dsEditoriales.Tables["Editoriales"].Columns[10].ColumnName.ToString()));
        }


        private void MostrarPosicion()
        {
            //Total Registros
            int iTotal = bmAutores.Count;
            //Numero (1, 2, ....) de registro
            int iPos;

            if (iTotal == 0)
                LblPosicion.Text = "No Registros";
            else
            {
                iPos = bmAutores.Position + 1;
                //Mostrar informacion en la etiqueta
                LblPosicion.Text = iPos.ToString() + " de " + iTotal.ToString();
            }
        }

        private void BtnPrimero_Click(object sender, EventArgs e)
        {
            bmAutores.Position = 0;
            MostrarPosicion();
        }

        private void BtnAnterior_Click(object sender, EventArgs e)
        {
            bmAutores.Position -= 1;
            MostrarPosicion();
        }

        private void BtnSiguiente_Click(object sender, EventArgs e)
        {
            bmAutores.Position += 1;
            MostrarPosicion();
        }

        private void BtnUltimo_Click(object sender, EventArgs e)
        {
            bmAutores.Position = bmAutores.Count - 1;
            MostrarPosicion();
        }

        private void BtnAñadir_Click(object sender, EventArgs e)
        {
            DataTable Autores = dsEditoriales.Tables["Editoriales"];
            DataRowCollection cfilas = Autores.Rows;
            DataRow nuevaFila;
            try
            {
                nuevaFila = Autores.NewRow();
                // Datos por omisión para las columnas de la nueva fila
                nuevaFila[0] = "Código";
                nuevaFila[1] = "Nombre";
                nuevaFila[2] = "Dirección ";
                nuevaFila[3] = "";
                nuevaFila[4] = "";
                nuevaFila[5] = "";
                nuevaFila[6] = "";
                nuevaFila[7] = "";
                nuevaFila[8] = "";
                nuevaFila[9] = "";
                nuevaFila[10] = true;
                cfilas.Add(nuevaFila);
                BtnUltimo.PerformClick();
                MostrarPosicion();
                LblResultado.Text = "";
                TxtCod_Edit.Enabled = true;
                TxtCod_Edit.Focus();
            }
            catch (ConstraintException ex)
            {
                // Capturar posible error por clave duplicada
                MessageBox.Show(ex.Message);
            }
        }

        private void BtnGuardar_Click(object sender, EventArgs e)
        {
            GestEditorial GEditorial = new GestEditorial();
            if (GEditorial.ExisteEditorial(TxtCod_Edit.Text, rutaBDBiblioteca))
                LblResultado.Text = "Editorial Existente";
            else
            {
                CEditorial NuevoAutor =
                     new CEditorial(TxtCod_Edit.Text, TxtNom_Edit.Text, TxtDir_Edit.Text, TxtCod_Postal.Text, TxtCiudad_Edit.Text, TxtPais_Edit.Text, TxtTel_Edit.Text, TxtMail_Edit.Text,TxtWeb_Edit.Text, TxtContac_Edit.Text, ChbEstado.Checked);
                if (!GEditorial.GrabarAutor(NuevoAutor, rutaBDBiblioteca))
                    LblResultado.Text = "Error en el registro de la Editorial";
                else
                {
                    LblResultado.Text = "Editorial Guardada";
                }
            }
        }

        private void BtnBorrar_Click(object sender, EventArgs e)
        {
            GestEditorial GEditorial = new GestEditorial();
            CEditorial EliminarEditorial =
                     new CEditorial(TxtCod_Edit.Text, TxtNom_Edit.Text, TxtDir_Edit.Text, TxtCod_Postal.Text, TxtCiudad_Edit.Text, TxtPais_Edit.Text, TxtTel_Edit.Text, TxtMail_Edit.Text,TxtWeb_Edit.Text, TxtContac_Edit.Text, ChbEstado.Checked = false);

            if (GEditorial.EliminarEditorial(EliminarEditorial, rutaBDBiblioteca))
            {
                LblResultado.Text = "Editorial Eliminada";
                bmAutores.Position -= 1; //muestra el registro anterior
                MostrarPosicion();
            }
            else
                LblResultado.Text = "Editorial no Eliminada";
        }

        private void BtnModificar_Click(object sender, EventArgs e)
        {
            GestEditorial GEditorial = new GestEditorial();
            CEditorial ModificarAutor = new CEditorial(TxtCod_Edit.Text, TxtNom_Edit.Text, TxtDir_Edit.Text, TxtCod_Postal.Text, TxtCiudad_Edit.Text, TxtPais_Edit.Text, TxtTel_Edit.Text, TxtMail_Edit.Text,TxtWeb_Edit.Text, TxtContac_Edit.Text, ChbEstado.Checked);
            if (GEditorial.ModificarEditorial(ModificarAutor, rutaBDBiblioteca))
            {
                LblResultado.Text = "Editorial Modificada";
            }
            else
                LblResultado.Text = "Editorial no Modificada";
        }

        private void BtnActualizar_Click(object sender, EventArgs e)
        {
            dsEditoriales.Tables.Clear();
            SqlConnection cnBiblioteca;

            AccDatBiblioteca AccDatBiblioteca = new AccDatBiblioteca();

            cnBiblioteca = AccDatBiblioteca.ObtenerConexion(rutaBDBiblioteca);
            SqlDataAdapter adp = AccDatBiblioteca.ObtenerAdaptador("SELECT * FROM Editoriales", cnBiblioteca);

            adp.Fill(dsEditoriales, "Editoriales");
            cnBiblioteca.Close();
            Grilla_Edit.DataSource = dsEditoriales.Tables["Editoriales"];
            bmAutores = BindingContext[dsEditoriales, "Editoriales"];
            bmAutores.Position = bmAutores.Count - 1;
            MostrarPosicion();
            LblResultado.Text = "";
            TxtCod_Edit.Enabled = false;
            TxtCod_Edit.Focus();
        }


        private void TxtCod_Edit_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    if (Char.IsDigit(e.KeyChar))
                            e.Handled = false;
                        else
                            e.Handled = true;
        }

        private void TxtNom_Edit_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
               else
                    if (Char.IsDigit(e.KeyChar))
                         e.Handled = false;
                         else
                                if (Char.IsSeparator(e.KeyChar))
                                    e.Handled = false;
                                else
                                     e.Handled = true;
        }

        private void TxtDir_Edit_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    if (Char.IsPunctuation(e.KeyChar))
                        e.Handled = false;
                    else
                        if (Char.IsDigit(e.KeyChar))
                            e.Handled = false;
                        else
                            if (Char.IsSeparator(e.KeyChar))
                                e.Handled = false;
                        else
                            e.Handled = true;
        }

        private void TxtCod_Postal_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                   if (Char.IsDigit(e.KeyChar))
                       e.Handled = false;
                    else
                         e.Handled = true;
        }

        private void TxtCiudad_Edit_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    if (Char.IsPunctuation(e.KeyChar))
                        e.Handled = false;
                    else
                        if (Char.IsDigit(e.KeyChar))
                            e.Handled = false;
                        else
                            if (Char.IsSeparator(e.KeyChar))
                                e.Handled = false;
                        else
                            e.Handled = true;
        }

        private void TxtPais_Edit_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                        else
                            e.Handled = true;
        }

        private void TxtTel_Edit_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
                 e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
        }

        private void TxtMail_Edit_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    if (Char.IsPunctuation(e.KeyChar))
                        e.Handled = false;
                    else
                        if (Char.IsDigit(e.KeyChar))
                            e.Handled = false;
                        else
                            e.Handled = true;
        }

        private void TxtWeb_Edit_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    if (Char.IsPunctuation(e.KeyChar))
                        e.Handled = false;
                    else
                        if (Char.IsDigit(e.KeyChar))
                            e.Handled = false;
                        else
                            e.Handled = true;
        }

        private void TxtContac_Edit_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    if (Char.IsPunctuation(e.KeyChar))
                        e.Handled = false;
                    else
                        if (Char.IsDigit(e.KeyChar))
                            e.Handled = false;
                        else
                            e.Handled = true;
        }

        private void TxtCod_Edit_Validating(object sender, CancelEventArgs e)
        {
            if (TxtCod_Edit.Text.Length == 0)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtCod_Edit, "Ingrese el Codigo del Autor");
            }
            else
                errorProvider1.SetError(TxtCod_Edit, null);
        }

        private void TxtNom_Edit_Validating(object sender, CancelEventArgs e)
        {
            if (TxtNom_Edit.Text.Length == 0)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtNom_Edit, "Ingrese Nombre de la Editorial");
            }
            else
                errorProvider1.SetError(TxtNom_Edit, null);
        }

        private void TxtDir_Edit_Validating(object sender, CancelEventArgs e)
        {
            if (TxtDir_Edit.Text.Length == 0)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtDir_Edit, "Ingrese la Dirección");
            }
            else
                errorProvider1.SetError(TxtDir_Edit, null);
        }

        private void BtnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }
   }
}
